import axios from 'axios'
import router from '@/router'
import { useUserStore } from '@/store/user'

// localStorage 和 sessionStorage 区别
// 存储周期：
//     localStorage: 数据没有过期时间，除非用户手动清除或代码中明确删除，否则数据将一直保存。
//     sessionStorage: 数据仅在当前会话期间有效，当页面会话结束（即浏览器标签关闭）时，数据会被自动清除。
// 作用域：
//     localStorage: 没有页面限制，同源下的所有页面都可以访问相同 localStorage。
//     sessionStorage: 即使在同一浏览器中打开多个标签页或窗口，它们之间也不会共享。
// 适用场景：
//     localStorage: 适合长期保存数据，如用户的偏好设置、主题模式等。
//     sessionStorage: 适用于临时数据的保存，比如单次任务的状态信息，表单数据缓存等，确保用户离开页面后数据不会残留。

export function setInterceptors(app: any) {
  const proxy = app.config.globalProperties
  axios.interceptors.request.use((config: any) => {
    config.headers['Authorization'] = 'Bearer ' + sessionStorage.getItem('token')
    return config
  })
  const userStore = useUserStore()
  axios.interceptors.response.use(
    (response: any) => {
      switch (response.data.code) {
        case 200:
          break
        case 40001:
          // 401 清除token信息并跳转到登录页面
          userStore.logout()
          router.replace({
            path: 'login',
            query: { redirect: router.currentRoute.value.fullPath }
          })
          break
        case 50000:
          proxy.$notify({
            title: '错误',
            message: response.data.message,
            type: 'error'
          })
        default:
          // console.log(error.response)
          proxy.$notify({
            title: '错误',
            message: response.data.message,
            type: 'error'
          })
          break
      }
      return response
    }

  )
}
